﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SILAS.BL;
using SILAS.Entidades;
using Microsoft.Practices.Unity;
using SILAS.UI.Models;

namespace SILAS.UI.Controllers
{
    public class EmpleadoController : Controller
    {


        [Dependency]
        public IEmpleadoBL empleadoBL { get; set; }


        [Dependency]
        public ICargoBL cargoBL { get; set; }

        //
        // GET: /Empleado/

        public ActionResult Index()
        {
            ViewBag.Message = "EMPLEADO";
            return View();
        }

        public ActionResult ListarEmpleados(string criterio)
        {
            //var pageNumber = page ?? 1;
            //var lista = empleadoBL.GetAllFromEmpleado(pageNumber, 7);
            //return View(lista);
            var lista = empleadoBL.GetAllFromEmpleadoByCriterio(criterio);
            return View(lista);
        }


        //
        // GET: /Empleado/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /Empleado/Create

        public ActionResult Create()
        {
            var listCargos = cargoBL.GetAllFromCargo();

            ViewData["IdCargo"] = new SelectList(listCargos, "Id", "Descripcion");
            return View();
        }

        //
        // POST: /Empleado/Create

        [HttpPost]
        public ActionResult Create(Empleado empleado)
        {
            try
            {
                TempData["empleado"] = empleado;

                empleadoBL.agregarEmpleado(empleado);
                // TODO: Add insert logic here

                return RedirectToAction("ListarEmpleados");
            }
            catch
            {
                var emp = TempData["empleado"] as Empleado;

                var listCargos = cargoBL.GetAllFromCargo();

                ViewData["IdCargo"] = new SelectList(listCargos, "Id", "Descripcion", emp.IdCargo);


                return View(emp);
            }
        }

        //
        // GET: /Empleado/Edit/5

        public ActionResult Edit(int id)
        {

            var emple = empleadoBL.getEmpleadobyId(id);

            var listCargos = cargoBL.GetAllFromCargo();

            ViewData["IdCargo"] = new SelectList(listCargos, "Id", "Descripcion", emple.IdCargo);

            return View(emple);


        }

        //
        // POST: /Empleado/Edit/5

        [HttpPost]
        public ActionResult Edit(Empleado empleado, FormCollection _form)
        {
            try
            {
                // TODO: Add update logic here
                empleadoBL.modificarEmpleado(empleado);

                var result = new
                {
                    msg = "La Información fue Guardada Correctamente",
                    exito = true
                };

                return Json(result, JsonRequestBehavior.AllowGet);

                //return RedirectToAction("ListarEmpleados");
            }
            catch (SystemException ex)
            {

                var result = new
                {
                    msg = ex.Message,
                    exito = false
                };

                return Json(result, JsonRequestBehavior.AllowGet);
                //return View();
            }
        }

        //
        // GET: /Empleado/Delete/5

        public ActionResult Delete(int id)
        {
            empleadoBL.eliminarEmpleado(id);
            return RedirectToAction("ListarEmpleados");

        }

        //
        // POST: /Empleado/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }


        public ActionResult GetEmpleado(string term)
        {
            var lista = from e in empleadoBL.GetAllFromEmpleadoByCriterio(term)
                        select new
                        {
                            value = e.Id,
                            label = e.ApPaterno + " " + e.ApMaterno + " " + e.Nombre,
                            empleado = new
                            {
                                IdEmpleado = e.Id,
                                Nombres = e.Nombre,
                                DNI = e.DNI,
                                ApPaterno = e.ApPaterno,
                                ApMaterno = e.ApMaterno,
                                Cargo = e.Cargo.Descripcion
                            }
                        };

            return Json(lista, JsonRequestBehavior.AllowGet);


        }
    }
}
